coin
coin 包
结构体
一种类型为 T 的币,价值为“value”。可交易和可存储
struct Coin<phantom T> has key, store {
id: UID,
balance: Balance<T>
}
通过“create_currency”函数创建的每个 T 类型币都将有一个 CoinMetadata < T >的唯一实例,该实例存储该币类型的元数据。
struct CoinMetadata<phantom T> has key, store {
id: UID,
/// 小数位,例如一个币value=7002,decimals=3,那么应该显示未7.002
decimals: u8,
/// Name for the token
name: string::String,
/// Symbol for the token
symbol: ascii::String,
/// Description of the token
description: string::String,
/// URL for the token logo
icon_url: Option<Url>
}
和 CoinMetadata 类似,但是仅为使用了 DenyList 的 regulated coins 创建 这个对象总是不可变
struct RegulatedCoinMetadata<phantom T> has key {
id: UID,
/// The ID of the coin's CoinMetadata object.
coin_metadata_object: ID,
/// The ID of the coin's DenyCap object.
deny_cap_object: ID,
}
允许持有者铸造和销毁币。可交易 一般用作 witness
struct TreasuryCap<phantom T> has key, store {
id: UID,
total_supply: Supply<T>
}
允许持有者冻结地址,防止这些地址与作为交易输入的硬币交互。
struct DenyCap<phantom T> has key, store {
id: UID,
}
函数
返回流通的所有 T 类型币的数量
public fun total_supply<T>(cap: &TreasuryCap<T>): u64
返回 TreasuryCap 中的 Supply,并删除这个 TreasuryCap
public fun treasury_into_supply<T>(treasury: TreasuryCap<T>): Supply<T>
返回 TreasuryCap 中 Supply 的一个不可变(只读)引用
public fun supply_immut<T>(treasury: &TreasuryCap<T>): &Supply<T>
返回 TreasuryCap 中 Supply 的一个可变引用
public fun supply_mut<T>(treasury: &mut TreasuryCap<T>): &mut Supply<T>
返回 coin 的值
public fun value<T>(self: &Coin<T>): u64
返回 coin 中 Balance 的不可变引用
public fun balance<T>(coin: &Coin<T>): &Balance<T>
返回 coin 中 Balance 不可变引用
public fun balance_mut<T>(coin: &mut Coin<T>): &mut Balance<T>
把一个 Balance 封装进 Coin 中,使它能够交易
public fun from_balance<T>(balance: Balance<T>, ctx: &mut TxContext): Coin<T>
销毁一个 Coin,返回它的 Balance
public fun into_balance<T>(coin: Coin<T>): Balance<T>
从 balance 中分割出部分 value,使用这部分封装并返回一个 Coin
public fun take<T>(balance: &mut Balance<T>, value: u64, ctx: &mut TxContext,): Coin<T>
将一个 coin 放入 balance 中,原 Coin 被销毁
public fun put<T>(balance: &mut Balance<T>, coin: Coin<T>)
销毁 c,并将其 value 合并进 self
public entry fun join<T>(self: &mut Coin<T>, c: Coin<T>)
从 self 中分割出一个 value 为 split_amount 的新 Coin
public fun split<T>(self: &mut Coin<T>, split_amount: u64, ctx: &mut TxContext): Coin<T>
将一个 Coin 均分成 n-1 份,剩下的留在原 Coin 中。新铸造的 n-1 个 Coin 放入数组中返回
public fun divide_into_n<T>(self: &mut Coin<T>, n: u64, ctx: &mut TxContext): vector<Coin<T>>
返回一个 value=0 的 Coin
public fun zero<T>(ctx: &mut TxContext): Coin<T>
销毁一个 value=0 的 Coin
public fun destroy_zero<T>(c: Coin<T>)
创建一个新的货币类型“T”,并返回 T 的“TreasuryCap”和“CoinMetadata” 只能使用“一次性见证”类型调用,确保每个“T”只有一个“TreasuryCap”。
public fun create_currency<T: drop>(
witness: T,
decimals: u8,
symbol: vector<u8>,
name: vector<u8>,
description: vector<u8>,
icon_url: Option<Url>,
ctx: &mut TxContext
): (TreasuryCap<T>, CoinMetadata<T>)
通过“create_currency”创建了一种新的货币,但具有额外的功能,允许特定地址冻结其硬币。这些地址不能作为输入对象与硬币交互。
public fun create_regulated_currency<T: drop>(
witness: T,
decimals: u8,
symbol: vector<u8>,
name: vector<u8>,
description: vector<u8>,
icon_url: Option<Url>,
ctx: &mut TxContext
): (TreasuryCap<T>, DenyCap<T>, CoinMetadata<T>)
铸币
public fun mint<T>(cap: &mut TreasuryCap<T>, value: u64, ctx: &mut TxContext,): Coin<T>
铸造一些 T 作为“余额”,并相应地增加“上限”的总供应量。如果 value+cap.total_supply`>=U64_MAX,则中止
public fun mint_balance<T>(
cap: &mut TreasuryCap<T>, value: u64
): Balance<T>
销毁 Coin,并相应的减少 total supply。返回 Coin 的 value 值
public entry fun burn<T>(cap: &mut TreasuryCap<T>, c: Coin<T>): u64
铸币并将 Coin 交易给 recipient
public entry fun mint_and_transfer<T>(
c: &mut TreasuryCap<T>, amount: u64, recipient: address, ctx: &mut TxContext
)